微信APP支付

文档说明

阅读对象

1、本规范的使用对象为服务商的技术开发人员、产品及业务。
2、开发人员应该对post提交、json 格式、http/https传输、非对称秘钥和数据签名等有一定认识。

修订记录

2019-05-06:新增

相关术语

微信APP支付:商户APP中集成微信SDK,用户点击后跳到微信内完成支付。

接口规则

协议规则

1、接口调用方式为http post。
2、数据传输使用json格式,编码使用utf-8,请求时存放json串的参数名为: jsonData,接口传递中文或含有特殊字符的参数时应URL Encoding,接口接收返回参数时应做URL Decoding。
3、如果json请求串中值为null,则json串格式应为{“test”: “”}。
4、接口的除merPriv字段之外,其他所有字段不应该包含特殊字符,如:“&”、”?”和”‘’”等。
5、后台通知商户返回应答参数的规则:为了表示商户交易系统已经收到交易应答,商户必须在应答接收页面输出一段特殊的字符串,组成规则为:固定字符串RECV_ORD_ID_加上交易应答中某一指定字段,指定字段请见具体接口商户应答参数。

安全规范

1、为了保证数据传输过程中的数据真实性和完整性,我们需要对数据进行数字签名,在接收签名数据之后进行签名校验。
2、详情请参见接口参数checkValue参数说明。
3、checkValue生成规则:目前仅支持CFCA签名方式,checkValue生成方法请参考CFCA签名。
简单示例:
HashMap<String , String> jsonDataMap = new HashMap<String , String>();
jsonDataMap.put("termOrdId" , "20180820020626985855");
jsonDataMap.put("memberId" , memberId);
jsonDataMap.put("ordAmt" , ordAmt);
jsonDataMap.put("authCode" , "134755413751742262");//二维码
jsonDataMap.put("goodsDesc" , URLEncoder.encode(goodsDesc , Constant.CHARSET_UTF8));
jsonDataMap.put("merPriv" , "{\"Ic\":\"2253425259\",\"merNoticeUrl\":\"http://172.31.13.182:38087/site/testHttp/testB/\",\"callType\":\"04\"}");
jsonDataMap.put("apiVersion" , apiVersion);

String jsonData = JSON.toJSONString(jsonDataMap);

// CFCA 签名
String checkValue = CFCASignature.signature("100001.pfx","888888", jsonData, "UTF-8").getSign();

补单机制

交易结果以异步通知机制为准,也可以主动调用二维码订单查询接口查询交易相关信息。
1、Virgo需要回调方返回一个应答,应答内容为RECV_ORD_ID_+请求唯一ID,如果不是 则virgo发送状态为失败,但不会重试,失败原因为:NO_RECV_ORD_ID。
2、Virgo请求HTTP或HTTPS,默认超时时间为5秒,超时后会重试3次。
3、Virgo对请求应答不是200~300之间的错误,会默认重试3次。
4、Virgo请求对HTTPS不认证验签和ALLOW_ALL_HOSTNAME_VERIFIER。
5、POSTDATA建议对中文进行编码处理,以免导致服务端乱码问题。
6、一般情况下发生商户URL无法应答,请确认URL是否正确,可以在浏览器上先运行一下,确保能正常访问。
7、Virgo默认使用ISO-8895-1编码来进行post请求的,如果直接用中文进行发送,请选择指定的编码参数postCharSet。

微信App支付

场景介绍

商户APP中集成微信SDK,用户点击后跳到微信内完成支付。

功能描述

服务商通过调用以下接口进行微信APP支付相关业务。
1、微信App支付:商户APP中集成微信SDK,用户点击后跳到微信内完成支付。
2、关单接口:用于对超过1分钟还未支付的订单进行关闭操作。此接口目前只支持微信和支付宝,不支持银联二维码,发起关单操作的订单必须距离发起下单操作60S以上。发起关单时,若收到transStat为S,respCode非000000,商户应该再次通过查询接口获取交易成功的支付信息详情。

业务流程

1、渠道商向销售/运营申请开通渠道商APP权限。
2、渠道商联系销售向运营提供 《移动支付商户资料表》 和营业执照申请APP支付微信渠道号。
3、接口调用
A、老接口存量商户调用商户业务开通接口。
B、老接口增量商户进件完成后调用商户业务开通接口。
C、新接口增量商户可通过商户基本信息入驻接口—>商户业务开通接口。
D、有同步应答和异步通知通知入驻结果。
4、收到异步通知后,执行以下流程同时提供 微信APP支付申请表 表格给到销售/运营。
5、联系汇付运营询问入驻成功后的银行商户编号(即微信侧的商户号)。
6、登录 https://pay.weixin.qq.com/ 选择在汇付申请的微信渠道号账号登录,进入服务商功能->特约商户管理页面下输入商户号,即为上一步查询出的银行商户编码,查询出唯一商户。
_static/images/wxapp6.png
7、点击认证,进入如下页面:
_static/images/wxapp7.png
8、点击填写申请资料,进入如下页面:(页面需上传营业执照照片,填写门店地址,商户为主体的对公结算账户信息包含:开户银行,开户银行城市,开户支行名称,银行账号),填写完毕后点击下一步。
_static/images/wxapp8.png
9、页面填写完毕后,1-3个工作日后商户收到财付通的打款金额数,如下图,红框会出现填写金额页面,填入相关金额。
_static/images/wxapp9.png
10、认证完成后联系汇付运营人员,提交第四步中填写的表格,在微信侧报备通过后可开始对接。

API列表

App支付

描述

尊敬的客户
我司接到微信公告,微信App支付(即用户使用“微信扫一扫”扫描商户动态收款码完成支付)不再开放给三方支付机构。
增量商户将无法再使用此支付功能,存量商户可使用到9月15日,之后也将无法使用此功能。请各位尽快根据实际业务情况进行调整,避免影响到商户后续使用。感谢您的配合与理解!

输入参数

输入参数 参数代码 参数名称 数据类型 是否必填 参数说明
  jsonData json数据 String 必填 jsonData数据,内容见下方描述
  checkValue 加签密文 String 必填  
JsonData 参数代码 参数名称 数据类型 是否必填 参数说明
  accSplitBunch 分账串 String( 4000 ) 非必填
分账说明 divRate:分账金额单位(元)
memberId:商户号
feeMemberId:手续费承担方商户ID
divCusCount:分账条目总数 例:
{“divCusCount”:”2”,”feeMemberId”: “0001”,”acctInfos”:
[{“divRate”:”0.09”,”memberId”:”030147446000014894”},
{“divRate”:”0.91”,”memberId”:”030147446000014894”}]}
  termOrdId 商户订单号 String( 1-50 ) 必填
即商户支付订单号,商户传
入时保证唯一
格式:数字+字母
  appId
用户在APP支
付的appId
String( 32 ) 必填 微信分配的appId
  payChannelId 入驻的渠道号 String( 1-64 ) 必填 商户在微信入驻的渠道号
  payScene 支付场景 String( 4000 ) 必填 固定值01,App支付
  goodsDesc 商品名称 String( 127 ) 必填
UrlEncode进行编码,
如:%E6%B5%8B%E8%AF
  memberId 商户号 String( 18 ) 必填 汇付分配的商户号
  ordAmt 订单金额 String( 14 ) 必填
单位元,需保留小数点后两
位,例如: 1.00
  apiVersion 接口版本号 String( 7 ) 必填 3.0.0.2
  merPriv 商户私有域 String( 1500 ) 非必填
商户扩展域、json串格
式。
终端传入分帐遇到优惠的处理规则:
termDivCouponType (非必填);
01 – 按比例分02 – 按顺序保障
03 –只给交易商户(默认)
异步通知地址:merNoticeUrl(非
必填);
基站信息:lc(非必填,注意若位
数不足则用空格补足:MCC( 3
位 )+MNC( 2位 )+LAC( 5
位)+CID( 5位 ))
外部调用标识:callType(非必填);
callType选项:
01 – 智能POS
02 – MPOS
03 – MPOS SDK
04 – 智能POS SDK
05 – 传统POS
06 – 扫码设备
99 – SAAS通道接入
  payChannelType 支付方式 String( 2 ) 必填 固定2位,W3 微信
  timeExpire 订单过期时间 String( 14 ) 非必填
订单失效时间,超过此时
间限制之后该笔订单将无法进行支
付,失效时间与订单创建时间之间
的间隔应大于60S,
YYYYMMDDHHMMSS格式
  isDelayAcct 延迟标识 String( 1 ) 非必填 值为1时,该笔交易为延迟交易。
  remark 备注 String( 45 ) 非必填
超出长度会导致交易失败,
败,UrlEncode进行编码,
如:%E6%B5%8B%E8%AF

输出参数

输出参数 参数代码 参数名称 数据类型 是否必填 参数说明
  respCode 返回码 String( 6 ) 必填
示例:
000000表示成功,
000199交易处理中,
其余表示失败( 详见错误返回码 )
  respDesc 返回文字说明 String( 256 ) 非必填  
  checkValue 加签密文 String 必填  
  jsonData Json字符串 String 必填 jsonData数据,内容见下方描述
JsonData 参数代码 参数名称 数据类型 是否必填 参数说明
  memberId 商户号 String( 18 ) 必填 汇付分配的商户号
  merName 商户名称 String( 128 ) 必填  
  payInfo 调起SDK的支付串 String( 256 ) 非必填 用于前端跳转微信支付页面
  ordId 汇付订单号 String( 32 ) 非必填 同:orderId
  bankCode 银行返回码,可空 String( 64 ) 非必填 可忽略
  bankMessage
银行返回描述
,可空
String( 256 ) 非必填
可忽略
  termOrdId 商户订单号 String( 1-50 ) 必填
即商户支付订单号,商户传入
时保证唯一
格式:数字+字母
  transDate 交易日期 String( 8 ) 非必填 交易发生日期,YYYYMMDD
  transTime 交易时间 String( 6 ) 非必填 交易发生时间,HHMMSS

关单接口

描述

用于对超过1分钟还未支付的订单进行关闭操作。此接口目前只支持微信和支付宝,不支持银联二维码,发起关单操作的订单必须距离发起下单操作60S以上。
发起关单时,若收到transStat为S,respCode非000000,商户应该再次通过查询接口获取交易成功的支付信息详情

输入参数

输入参数 参数代码 参数名称 数据类型 是否必填 参数说明
  checkValue 加签密文 String 必填 Cfca方式验签
  jsonData json json 必填 jsonData数据,内容见下方描述
JsonData 参数代码 参数名称 数据类型 是否必填 参数说明
  memberId 商户号 String(18) 必填 必填,会员号
  termOrdId 商户订单号 String(50) 必填
商户支付订单号,商户传入时
保证唯一格式:数字+字母
  transDate 交易日期 String(8) 必填 格式,YYYYMMDD
  apiVersion 接口版本号 String( 7 ) 必填 3.0.0.1

输出参数

输出参数 参数代码 参数名称 数据类型 是否必填 参数说明
  respCode 返回码 String( 6 ) 必填
示例:
000000表示关单成功,
000199标识处理中,
其余表示失败( 详见错误返回码 )
  respDesc 返回文字说明 String( 256 ) 非必填  
  checkValue 加签密文 String 必填  
  jsonData Json字符串 String 必填 jsonData数据,内容见下方描述
JsonData 参数代码 参数名称 数据类型 是否必填 参数说明
  memberId 商户号 String( 18 ) 必填 汇付分配的商户号
  termOrdId 商户订单号 String( 1-50 ) 必填
即商户支付订单号,商户传入
时保证唯一
格式:数字+字母
  transStat 原交易状态 String( 1 ) 必填
选项:
I—初始
P –处理中
S—成功
F—失败
  transDate 原交易日期 String( 8 ) 非必填 原交易发生日期,YYYYMMDD
  transTime 原交易时间 String( 6 ) 非必填 原交易发生时间,HHMMSS

错误码

错误码

常见错误码描述,如还未解决问题请及时联系专业技术支持人员。
错误码 描述                               错误码 描述                                       错误码 描述
000000 操作成功                            000098 请求参数非法                               000267 接口获取状态与订单状态不符
000093 请求参数不规范                       000097 数据库异常                                000268 二维码反向交易超时
000094 重复交易                            000234 订单生成失败                               000272 订单查询,未查询到记录
000095 验签失败                            000236 PA入账失败                                 000273 支付通道类型不为微信或者支付宝
000100 业务系统已关闭                       000238 对象属性复制异常                           000277 无此交易类型
000107 业务系统不存在                       000240 冻结账务对象不存在,分账串解析为空           000278 无此交易记录
000202 订单已存在                          000241 订单被风控拒绝,风控未通过                   000279 退货失败,该笔订单非退货交易
000203 原订单不存在                        000242 风控系统调用异常                            000197 控台系统异常,网络繁忙
000204 撤销金额与原订单金额不一致           000243 撤销或退货失败,PA冻结超时                   000281 交易处理中
000205 撤销日期与原订单日期不一致           000244 不存在该账务类型                             000099 网络繁忙,请稍后再试
000206 撤销失败,账务状态异常              000245 分账串异常                                   000219 订单校验失败
000207 撤销失败,PA冻结失败                000250 退货失败,PA退款失败                          000220 签名上送失败,订单未完成支付
000208 撤销失败,通道失败                  000256 退货失败,PA冻结超时                          000221 签名上传失败,已上传
000209 撤销失败,原订单未完成              000255 确认交易失败,账务状态异常                      000213 退货失败,超出退货期限
000210 退货失败,原订单未完成              000257 确认交易失败,原订单未成功                     000214 退货失败,PA冻结失败
000211 退货失败,账务状态异常              000258 确认交易失败,确认金额与原交易金额不一致         000215 退货失败,通道失败
000212 退货失败,超出可退货金额            000260 消费撤销发通道扣款超时                         000261 消费退货发通道扣款超时
000199 二维码交易处理中                    000198 二维码交易失败

SDK与DEMO

说明

SDK和DEMO作为参考或示例,请服务商在使用过程中,要专业技术人员指导使用,注意系统兼容性。

Java版本

即将更新。

PHP版本

即将更新。